package gdut.edu.demo03;

/**
 * @Description汉诺塔问题
 * @Author JiaFu
 * @Date 2022/9/12 14:39
 */
public class TestHanio {
    public static void main(String[] args) {
        hanoi(3, 'A', 'B', 'C');
    }

    /**
     * @Description n个盘子，from为第一根柱子，mid为中间柱子，to为目标柱子
     * 无论有多少个盘子，都认为只有两个盘子，上面所有盘子和底部一个盘子
     * @Author JiaFu @Date 2022/9/12 14:40
     * @Param [n, from, mid, to]
     * @Return void
     **/
    public static void hanoi(int n, char from, char mid, char to) {
        if (n == 1) {
            System.out.println("第1个盘子从" + from + "移动到" + to);
        } else {
            //将上面所有盘子移动到中间柱子
            hanoi(n - 1, from, to, mid);
            //将底部盘子移动到目标柱子
            System.out.println("第" + n + "个盘子从" + from + "移动到" + to);
            //将上面所有盘子从中间移动到目标位置
            hanoi(n - 1, mid, from, to);
        }
    }
}
